import 'dart:convert';

import 'package:shared_preferences/shared_preferences.dart';

/***
 * * 静态方法不能访问非静态成员
 * * 非静态方法可以访问静态变量
 * **/

/// 本地存储
class StorageUtil {
  //静态变量，存储唯一属性
  static StorageUtil _instance;
  //存储
  static SharedPreferences _prefs;

  // instance的getter方法，StorageUtil.instance获取对象
  static StorageUtil get instance => _getInstance();

  //工厂方法构造函数,获取对象
  factory StorageUtil() => _getInstance();

  //获取实例
  static StorageUtil _getInstance() {
    if (_instance == null) {
      //使用私有构造方法创建
      _instance = StorageUtil._internal();
    }
    return _instance;
  }

  // 私有的命名构造方法
  // 私有的自定义命名式构造方法，通过它实现一个类;
  // 子类不能继承internal
  // 不是关键字，可定义其他名字
  StorageUtil._internal() {
    //实现
    // initializationOperation();
  }

  // void initializationOperation() {
  //   Future<void> initial = init();
  // }
  //
  // static Future<void> init() async {
  //   if (_prefs == null) {
  //     _prefs = await SharedPreferences.getInstance();
  //   }
  // }

  Future<bool> setJsonString(String key, dynamic jsonVal) async {
    if (_prefs == null) {
      _prefs = await SharedPreferences.getInstance();
    }

    String jsonString = jsonEncode(jsonVal);

    return _prefs.setString(key, jsonString);
  }

  dynamic getJson(String key) async {
    if (_prefs == null) {
      _prefs = await SharedPreferences.getInstance();
    }

    String jsonString = _prefs.getString(key);
    return jsonString == null ? null : jsonDecode(jsonString);
  }
}
